// 表单校验规则由 schema2code 生成，不建议直接修改校验规则，而建议通过 schema2code 生成, 详情: https://uniapp.dcloud.net.cn/uniCloud/schema

const validator = {
	"user_id": {
		"rules": [{
				"required": true
			},
			{
				"format": "string"
			}
		],
		"defaultValue": {
			"$env": "uid"
		},
		"label": "作者"
	},
	"category_id": {
		"rules": [{
			"format": "string"
		}],
		"title": "分类",
		"label": "分类"
	},
	"content": {
		"rules": [{
			"required": true,
			"format": "string"
		}],
		"label": "文章内容",
		"title": "文章内容"
	},
	"excerpt": {
		"rules": [{
			"format": "string"
		}],
		"label": "摘要",
		"title": "文章摘录"
	},
	"article_status": {
		"rules": [{
				"format": "int"
			},
			{
				"range": [{
						"value": 0,
						"text": "草稿箱"
					},
					{
						"value": 1,
						"text": "已发布"
					}
				]
			}
		],
		"title": "文章状态",
		"defaultValue": 0,
		"label": "文章状态"
	},
	"view_count": {
		"rules": [{
			"format": "int"
		}],
		"title": "阅读数量",
		"label": "阅读数量"
	},
	"is_sticky": {
		"rules": [{
			"format": "bool"
		}],
		"title": "是否置顶",
		"label": "是否置顶"
	},
	"is_essence": {
		"rules": [{
			"format": "bool"
		}],
		"title": "阅读加精",
		"label": "阅读加精"
	},
	"comment_status": {
		"rules": [{
				"format": "int"
			},
			{
				"range": [{
						"value": 0,
						"text": "关闭"
					},
					{
						"value": 1,
						"text": "开放"
					}
				]
			}
		],
		"title": "开放评论",
		"label": "开放评论"
	},
	"publish_date": {
		"rules": [{
			"format": "timestamp"
		}],
		"title": "发表时间",
		"defaultValue": {
			"$env": "now"
		},
		"label": "发表时间"
	}
}

const enumConverter = {
	"article_status_valuetotext": {
		"0": "草稿箱",
		"1": "已发布"
	},
	"comment_status_valuetotext": {
		"0": "关闭",
		"1": "开放"
	}
}

/**
 * 将筛选条件转换为 where 对象
 * @param {Object} filter - 筛选条件
 * @param {Object} command - 数据库操作命令
 * @returns {Object} where 对象
 */
function filterToWhere(filter, command) {
	let where = {}
	for (let field in filter) {
		let {
			type,
			value
		} = filter[field]
		switch (type) {
			case "search":
				// 如果是搜索类型，将正则表达式作为 where 对象的属性值
				if (typeof value === 'string' && value.length) {
					where[field] = new RegExp(value)
				}
				break;
			case "select":
				// 如果是选择类型，将选择的值作为 where 对象的属性值
				if (value.length) {
					let selectValue = []
					for (let s of value) {
						selectValue.push(command.eq(s))
					}
					where[field] = command.or(selectValue)
				}
				break;
			case "range":
				// 如果是范围类型，将范围值作为 where 对象的属性值
				if (value.length) {
					let gt = value[0]
					let lt = value[1]
					where[field] = command.and([command.gte(gt), command.lte(lt)])
				}
				break;
			case "date":
				// 如果是日期类型，将日期范围作为 where 对象的属性值
				if (value.length) {
					let [s, e] = value
					let startDate = new Date(s)
					let endDate = new Date(e)
					where[field] = command.and([command.gte(startDate), command.lte(endDate)])
				}
				break;
			case "timestamp":
				// 如果是时间戳类型，将时间戳范围作为 where 对象的属性值
				if (value.length) {
					let [startDate, endDate] = value
					where[field] = command.and([command.gte(startDate), command.lte(endDate)])
				}
				break;
		}
	}
	return where
}

export {
	validator,
	enumConverter,
	filterToWhere
}